/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package client;

import java.sql.*;

/**
 *
 * @author piotrek
 */
public class Zajezdnie extends Module {
    private ResultSet rset;
    
    public Zajezdnie(String username, char[] password, String server) throws SQLException {
        super(username,password,server);
        columns=4;
    }
    @Override
    public void loadTable() {
        rset = null;
        set.clear();
        try {
            rset = stmt.executeQuery("select zajezdnia_tramwajowa_id,nazwa,adres,pojemnosc" +
                    " from zajezdnia_tramwajowa");
            while (rset.next()) {
                Object[] tmp=new Object[columns+1];
                for (int i=0;i<columns;i++) {
                    tmp[i]=rset.getObject(i+1);
                }
                tmp[columns]="Tramwajowa";
                set.add(tmp);
            }
            rset = stmt.executeQuery("select zajezdnia_autobusowa_id,nazwa,adres,pojemnosc" +
                    " from zajezdnia_autobusowa");
            while (rset.next()) {
                Object[] tmp=new Object[columns+1];
                for (int i=0;i<columns;i++) {
                    tmp[i]=rset.getObject(i+1);
                }
                tmp[columns]="Autobusowa";
                set.add(tmp);
            }
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }
    }

    public void loadWorkers(Object id) {
        rset = null;
        set.clear();
        String id_str=String.valueOf(id);
        try {
            rset = stmt.executeQuery("select imie,nazwisko,placa,pesel,fach from technik where (zajezdnia_tramwajowa_id=" + id_str + " or zajezdnia_autobusowa_id=" +id_str+ ")");
            while (rset.next()) {
                Object[] tmp=new Object[5];
                for (int i=0;i<5;i++) {
                    tmp[i]=rset.getObject(i+1);
                }
                set.add(tmp);
            }
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }
    }

    public void search(String name,String address,int minsize, int maxsize) throws SQLException {
        rset = null;
        set.clear();
        if (name!=null && address!=null) {
            rset = stmt.executeQuery("select zajezdnia_tramwajowa_id,nazwa,adres,pojemnosc" +
                    " from zajezdnia_tramwajowa where nazwa='" +name+"' and adres='"+address+
                    "' and pojemnosc between "+String.valueOf(minsize)+" and "+String.valueOf(maxsize));
            while (rset.next()) {
                Object[] tmp=new Object[columns+1];
                for (int i=0;i<columns;i++)
                    tmp[i]=rset.getObject(i+1);
                tmp[columns]="Tramwajowa";
                set.add(tmp);
            }
            rset = stmt.executeQuery("select zajezdnia_autobusowa_id,nazwa,adres,pojemnosc" +
                    " from zajezdnia_autobusowa where nazwa='" +name+"' and adres='"+address+
                    "' and pojemnosc between "+String.valueOf(minsize)+" and "+String.valueOf(maxsize));
            while (rset.next()) {
                Object[] tmp=new Object[columns+1];
                for (int i=0;i<columns;i++)
                    tmp[i]=rset.getObject(i+1);
                tmp[columns]="Autobusowa"; 
                set.add(tmp);
            }
        }
        else if (name==null && address!=null) {
            rset = stmt.executeQuery("select zajezdnia_tramwajowa_id,nazwa,adres,pojemnosc " +
                    "from zajezdnia_tramwajowa where adres='"+address+"' and pojemnosc between "
                    +String.valueOf(minsize)+" and "+String.valueOf(maxsize));
            while (rset.next()) {
                Object[] tmp=new Object[columns+1];
                for (int i=0;i<columns;i++)
                    tmp[i]=rset.getObject(i+1);
                tmp[columns]="Tramwajowa";
                set.add(tmp);
            }
            rset = stmt.executeQuery("select zajezdnia_autobusowa_id, nazwa,adres,pojemnosc " +
                    "from zajezdnia_autobusowa where adres='"+address+"' and pojemnosc between "
                    +String.valueOf(minsize)+" and "+String.valueOf(maxsize));
            while (rset.next()) {
                Object[] tmp=new Object[columns+1];
                for (int i=0;i<columns;i++)
                    tmp[i]=rset.getObject(i+1);
                tmp[columns]="Autobusowa";
                set.add(tmp);
            }
        }
        else if (name!=null && address==null) {
            rset = stmt.executeQuery("select zajezdnia_tramwajowa_id,nazwa,adres,pojemnosc " +
                    "from zajezdnia_tramwajowa where nazwa='"+name+"' and pojemnosc between "
                    +String.valueOf(minsize)+" and "+String.valueOf(maxsize));
            while (rset.next()) {
                Object[] tmp=new Object[columns+1];
                for (int i=0;i<columns;i++)
                    tmp[i]=rset.getObject(i+1);
                tmp[columns]="Tramwajowa";
                set.add(tmp);
            }
            rset = stmt.executeQuery("select zajezdnia_autobusowa_id,nazwa,adres,pojemnosc " +
                    "from zajezdnia_autobusowa where nazwa='"+name+"' and pojemnosc between "
                    +String.valueOf(minsize)+" and "+String.valueOf(maxsize));
            while (rset.next()) {
                Object[] tmp=new Object[columns+1];
                for (int i=0;i<columns;i++)
                    tmp[i]=rset.getObject(i+1);
                tmp[columns]="Autobusowa";
                set.add(tmp);
            }
        }
        else {
            rset = stmt.executeQuery("select zajezdnia_tramwajowa_id,nazwa,adres,pojemnosc " +
                    "from zajezdnia_tramwajowa where pojemnosc between "+String.valueOf(minsize)
                    +" and "+String.valueOf(maxsize));
            while (rset.next()) {
                Object[] tmp=new Object[columns+1];
                for (int i=0;i<columns;i++)
                    tmp[i]=rset.getObject(i+1);
                tmp[columns]="Tramwajowa";
                set.add(tmp);
            }
            rset = stmt.executeQuery("select zajezdnia_autobusowa_id,nazwa,adres,pojemnosc " +
                    "from zajezdnia_autobusowa where pojemnosc between "+String.valueOf(minsize)
                    +" and "+String.valueOf(maxsize));
            while (rset.next()) {
                Object[] tmp=new Object[columns+1];
                for (int i=0;i<columns;i++)
                    tmp[i]=rset.getObject(i+1);
                tmp[columns]="Autobusowa";
                set.add(tmp);
            }
        }
    }

    public void addT(String name, String address, int size) throws SQLException {
        stmt.execute("INSERT INTO ZAJEZDNIA_TRAMWAJOWA VALUES ( ZAJEZDNIA_TRAMWAJOWA_SEQ.nextval, '"+name+"', '"+address+"',"+String.valueOf(size)+" )");
    }

    public void addA(String name, String address, int size) throws SQLException {
        stmt.execute("INSERT INTO ZAJEZDNIA_AUTOBUSOWA VALUES ( ZAJEZDNIA_AUTOBUSOWA_SEQ.nextval, '"+name+"', '"+address+"',"+String.valueOf(size)+" )");
    }

    public void delete(Object id) throws SQLException {
        stmt.executeQuery("delete from zajezdnia_tramwajowa where zajezdnia_tramwajowa_id="+String.valueOf(id));
        stmt.executeQuery("delete from zajezdnia_autobusowa where zajezdnia_autobusowa_id="+String.valueOf(id));
    }

    public void modify(Object id,String name, String address, int size,int newtype, int oldtype) throws SQLException {
        if (oldtype!=newtype) {
            delete(id);
            if (newtype==Static.AUTOBUS)
                addA(name,address,size);
            if (newtype==Static.TRAMWAJ)
                addT(name,address,size);
        }
        else {
            if (newtype==Static.AUTOBUS)
                stmt.executeQuery("update zajezdnia_autobusowa set nazwa='"+name
                        +"', adres='"+address+"', pojemnosc="+String.valueOf(size)+
                        " where zajezdnia_autobusowa_id="+String.valueOf(id));
            if (newtype==Static.TRAMWAJ)
                stmt.executeQuery("update zajezdnia_tramwajowa set nazwa='"+name
                    +"', adres='"+address+"', pojemnosc="+String.valueOf(size)+
                    " where zajezdnia_tramwajowa_id="+String.valueOf(id));
        }
    }

}
